from scrapy.exceptions import DropItem


class ValidationPipeline:
    """
    数据清洗和验证管道。
    职责：确保进入下一流程的数据是干净、有效的。
    """

    # noinspection PyMethodMayBeStatic
    def process_item(self, item, spider):
        # 检查核心字段是否存在，如果不存在则丢弃该Item
        if not item.get('name') or not item.get('detail_url'):
            raise DropItem(f"Item缺少核心字段: name 或 detail_url -> {item}")

        # 对所有字符串类型的字段进行首尾去空格处理
        for key, value in item.items():
            if isinstance(value, str):
                item[key] = value.strip()

        # 将合格的Item交给下一个Pipeline处理
        return item
